package charles.testproject.testprocessexist;

import java.io.BufferedReader;
import java.io.InputStreamReader;
/**
 * JAVA检测指定的进程是否在运行。
 * 
 * @author JAVA世纪网(java2000.net, laozizhu.com)
 */
public class TestProcessExist {
  public static void main(String[] args) {
    System.out.println(findProcess("eclipse.exe"));
  }
  /**
   * 检测程序。
   * 
   * @param processName 线程的名字，请使用准确的名字
   * @return 找到返回true,没找到返回false
   */
  public static boolean findProcess(String processName) {
    BufferedReader bufferedReader = null;
    try {
     //这里的参数是怎么回事？
//      Process proc = Runtime.getRuntime().exec("tasklist /FI \"IMAGENAME eq " + processName + "\"");
     //去掉后面的一个"\""也是没有问题的，但是前面的第一个参数则不能做任何改动，费解
    //在JDK中，第一个String对象是command ，即是运行命令，那里这是一个我所不熟悉的命令，而最后一个是文件的路径，上面的那句是
    //根目录，而下面则是缺省的，那么也默认为跟目录
      Process proc = Runtime.getRuntime().exec("tasklist /FI \"IMAGENAME eq " + processName);
//      Process proc = Runtime.getRuntime().exec(processName);
      bufferedReader = new BufferedReader(new InputStreamReader(proc.getInputStream()));
      String line = null;
      while ((line = bufferedReader.readLine()) != null) {
System.out.println(line);
        if (line.contains(processName)) {
          return true;
        }
      }
      return false;
    } catch (Exception ex) {
      ex.printStackTrace();
      return false;
    } finally {
      if (bufferedReader != null) {
        try {
          bufferedReader.close();
        } catch (Exception ex) {}
      }
    }
  }
}